﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using SOAPServices.Persistencia;
using SOAPServices.Dominio;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;

namespace SOAPServices
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "Horarios" en el código, en svc y en el archivo de configuración a la vez.
    public class Horarios : IHorarios
    {

        //Instanciamos los servicios
        Turnos turnos = new Turnos();
        Cabinas cabinas = new Cabinas();

        private HorarioDAO horarioDAO = null;

        private HorarioDAO HorarioDAO
        {
            get
            {
                if (horarioDAO == null)
                    horarioDAO = new HorarioDAO();
                return horarioDAO;
            }
        }

        private EmpleadoDAO empleadoDAO = null;

        private EmpleadoDAO EmpleadoDAO
        {
            get
            {
                if (empleadoDAO == null)
                    empleadoDAO = new EmpleadoDAO();
                return empleadoDAO;
            }
        }

        public Dominio.Horario CrearHorario(int turno, int empleado, int cabina)
        {
            Turno turnoExistente = turnos.ObtenerTurno(turno);
            Cabina cabinaExistente = cabinas.ObtenerCabina(cabina);

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:17279/Empleados.svc/Empleados/4");
            req.Method = "GET";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string empleadoJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            Empleado empleadoObtenido = js.Deserialize<Empleado>(empleadoJson);

            Empleado empleadoExistente = EmpleadoDAO.Obtener(empleadoObtenido.Codigo);
            Horario nuevoHorario = new Horario()
            {
                Turno = turnoExistente,
                Empleado = empleadoExistente,
                Cabina = cabinaExistente,
            };
            return HorarioDAO.Crear(nuevoHorario);
        }


        public Horario ObtenerHorario(int item)
        {
            return HorarioDAO.Obtener(item);
        }
    }
}
